package com.imooc.juc;

import com.imooc.juc.bean.SaleTicket;

import java.time.temporal.Temporal;

/**
 *  现在 2 个线程，可以操作初始值为零的一个变量，实现一个线程对该变量加 1，一个线程对该变量减1，交替，来10轮。
 *      数据正常
 *  现在 4 个线程，可以操作初始值为零的一个变量，实现一个线程对该变量加 1，一个线程对该变量减1，交替，来10轮。
 *      出现 ”超卖现象“-->改进：多线程通信判断的时候，不能用 if，必须有循环 while。
 *
 * 1 线程     操作      资源类
 *
 * 2 判断     干活      唤醒
 *
 * 3 虚假唤醒
 *
 * @Date:2021/11/1/20:58
 * @Description:
 */
public class ProconsumerDemo {
    public static void main(String[] args) {
        SaleTicket saleTicket = new SaleTicket();

        new Thread( ()->{
            try {
                for (int i = 0; i < 10; i++) {
                    saleTicket.increment();
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"A" ).start();

        new Thread( ()->{
            try {
                for (int i = 0; i <10; i++) {
                    saleTicket.decrement();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"B" ).start();

        new Thread( ()->{
            try {
                for (int i = 0; i < 10; i++) {
                    saleTicket.increment();
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"c" ).start();

        new Thread( ()->{
            try {
                for (int i = 0; i <10; i++) {
                    saleTicket.decrement();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        },"D" ).start();

    }
}
